import {defineConfig} from 'vite'
import vue from '@vitejs/plugin-vue'
// Node.js 内置的 path 模块
import * as path from 'path'
// UnoCSS Vite 插件
import UnoCSS from 'unocss/vite'
// 自动引入 API 的插件
import AutoImport from 'unplugin-auto-import/vite'
// 按需自动加载组件的插件
import Components from 'unplugin-vue-components/vite'
// 按需自动加载 Naive UI 组件的解析器，用于帮助按需自动加载组件的插件自动按需加载 Navie UI 组件
import {NaiveUiResolver} from 'unplugin-vue-components/resolvers'
// 按需自动加载 st-common-ui-vue3 组件的解析器，用于帮助按需自动加载组件的 Vite 插件自动按需加载 st-common-ui-vue3 组件
import {StCommonUIVue3Resolver} from "st-common-ui-vue3"
// // 按需自动加载 st-ui-vue3-navie 组件的解析器，用于帮助按需自动加载组件的 Vite 插件自动按需加载 st-ui-vue3-navie 组件
// import {StUIVue3NavieResolver} from "st-ui-vue3-navie"

// 项目中 src 目录的绝对路径
// __dirname 表示当前文件所在目录的绝对路径
const srcAbsolutePath: string = path.resolve(__dirname, './src')

// https://vite.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    UnoCSS(),
    // 自动引入 API 的插件
    AutoImport({
      // 自动引入 Vue 和 Navie UI 中的 API
      imports: [
        'vue',
        {
          'naive-ui': ['useDialog', 'useMessage', 'useNotification', 'useLoadingBar'],
        },
      ],
    }),
    // 按需自动加载组件的插件
    Components({
      resolvers: [
        NaiveUiResolver(),
        // StUIVue3NavieResolver(),
        StCommonUIVue3Resolver()
      ],
    }),
  ],
  // vite 构建工具中的解析器配置
  resolve: {
    // 配置别名解析
    alias: {
      // 将项目文件中使用的 `@` 解析为 `src` 目录的绝对路径
      '@': srcAbsolutePath,
      // 项目中 common 模块目录的别名
      '@common': path.resolve(srcAbsolutePath, './modules/common'),
      // 项目中 consts 模块目录的别名
      '@consts': path.resolve(srcAbsolutePath, './modules/consts'),
      // 项目中 env 目录别名
      '@env': path.resolve(srcAbsolutePath, './modules/env'),
      // 项目中 res 目录别名
      '@res': path.resolve(srcAbsolutePath, './modules/res'),
      // 项目中 encrypt 目录别名
      '@encrypt': path.resolve(srcAbsolutePath, './modules/encrypt'),
      // 项目中 request 目录别名
      '@request': path.resolve(srcAbsolutePath, './modules/request'),
      // 项目中 tip 目录别名
      '@tip': path.resolve(srcAbsolutePath, './modules/tip'),
      // 项目中 loading 目录别名
      '@loading': path.resolve(srcAbsolutePath, './modules/loading'),
      // 项目中 components 目录别名
      '@components': path.resolve(srcAbsolutePath, './modules/components'),
      // 项目中 icon 目录别名
      '@icon': path.resolve(srcAbsolutePath, './modules/icon'),
      // 项目中 config 目录别名
      '@config': path.resolve(srcAbsolutePath, './modules/config'),
      // 项目中 styles 目录别名
      '@styles': path.resolve(srcAbsolutePath, './modules/styles'),
      // 项目中 router 模块目录的别名
      '@router': path.resolve(srcAbsolutePath, './modules/router'),
      // 项目中 login 模块目录的别名
      '@login': path.resolve(srcAbsolutePath, './modules/login'),
      // 项目中 user 模块目录的别名
      '@user': path.resolve(srcAbsolutePath, './modules/user'),
      // 项目中 menu 模块目录的别名
      '@menu': path.resolve(srcAbsolutePath, './modules/menu'),
      // 项目中 sys 系统管理模块目录的别名
      '@sys': path.resolve(srcAbsolutePath, './modules/sys'),
      // 项目中 layout 布局模块目录的别名
      '@layout': path.resolve(srcAbsolutePath, './modules/layout'),
    },
  },
  build: {
    // 打包兼容浏览器的目标
    target: "esnext",
  }
})
